package cn.edu.wynu.exception;

public class MyFirstException {
    /**
     * 测试第二种处理异常的方式：可能抛出异常（throws）
     *  把可能发生的异常抛给调用者，让调用者处理
     */
    void testZero() throws Exception {
        int i = 1;
        int i1 = i / 0;
        System.out.println(i1);
        Exception exception = new Exception();
        throw exception;
    }

    /**
     * 调用者可以选择处理异常，也可以选择不处理，让上层来处理
     * @param args 参数列表
     * @throws Exception 可能会抛出异常
     */
    public static void main(String[] args) throws Exception{
        MyFirstException firstException = new MyFirstException();
        firstException.testNumberFormatException();
        firstException.testZero();
    }

    /**
     * 测试第一种处理异常的方式：捕获异常（try catch finally）
     */
    private void testNumberFormatException() {
        String num = "123";
        String s = "abc";

        // 正常情况，num是一个数值，可以使用Integer.parseInt()方法转换为数值
        int i = Integer.parseInt(num);
        System.out.println(i + 1);

        // 错误情况，s是一个字符串，不能使用Integer.parseInt()方法转换为数值
        try {
            int j = Integer.parseInt(s);
            System.out.println(j + 1);
        } catch (Exception e) {
            System.out.println(e.getLocalizedMessage());
            System.out.println("提醒管理员，或者用户，你的输入有误，不可以输入非数值类型");
        } finally {
            System.out.println("不管是否捕获到异常，都会走到这段代码!");
        }

        System.out.println("发生异常，测试本行代码是否能被执行到2");
    }
}
